import { reqGetBaseInfo, reqGetProfile, reqLogin } from '@/api/user'
import { getToken, removeToken, setToken } from '@/utils/auth'
import { resetRouter } from '@/router'
const state = {
  token: getToken() || '',
  userInfo: {}
}
const mutations = {
  setToken(state, newToken) {
    state.token = newToken
    // 同时本地存储
    setToken(newToken)
  },
  setUserInfo(state, newUserInfo) {
    state.userInfo = newUserInfo
  },
  // 将来退出时需要清除个人信息
  removeUserInfo(state) {
    state.userInfo = {}
  },
  // 退出时清除token
  removeToken(state) {
    // 清除Vuex中的token
    state.token = ''
    // 清除cookie中的token
    removeToken()
  }
}
const actions = {
  logout(context) {
    // 清除token
    context.commit('removeToken')
    // 清除用户信息
    context.commit('removeUserInfo')
    // 重置路由
    resetRouter()
    // 清空vuex中的路由
    // 如果你需要在一个模块内部，提交另一个模块内部的mutatins,传递三个参数{root:true}
    context.commit('permission/setRoutes', [], { root: true })

    context.commit('settings/resetTheme', null, { root: true })
  },

  async login(context, data) {
    const res = await reqLogin(data)
    console.log(res);
    const token = res.data
    context.commit('setToken', token)
    // return new Promise((resolve, reject) => {
    //   reqLogin(data).then(res => {
    //     const token = res.data
    //     context.commit('setToken', token)
    //     resolve(res)
    //   }).catch(err => {
    //     reject(err)
    //   })
    // })
  },
  // getUserInfo(context){
  //   return new Promise((resolve,reject)=>{
  //     reqGetProfile().then(res=>{
  //       console.log(res);
  //       context.commit('setUserInfo',res.data)
  //       resolve(res)
  //     }).catch((err)=>{
  //       reject(err)
  //     })
  //   }) 
  // }
  async getUserInfo(context) {
    // 不包含头像的用户信息
    const { data: data1 } = await reqGetProfile()
    // 包含头像的用户信息
    const { data: data2 } = await reqGetBaseInfo(data1.userId)
    // 两个数据进行合并用户信息
    const resultObj = {
      ...data1,
      ...data2
    }
    context.commit('setUserInfo', resultObj)
    return resultObj
  }
}
const getters = {}
export default {
  namespaced: true,
  state,
  mutations,
  actions,
  getters
}